home *** CD-ROM | disk | FTP | other *** search
- 190 DEF FN LESS(X)=((X/360)-FIX(X/360))*360
- 200 DIM TI%(14),UR(5),SD(5)
- 220 RA=.0174532925#
- 230 PRINT " SOLAR AND LUNAR ECLIPSE CALCULATION PROGRAM":PRINT
- 231 PRINT " FROM THE NOV., 1986 ASTRONOMY MAGAZINE":PRINT:PRINT
- 232 PRINT "THIS PROGRAM WILL PREDICT SOLAR AND LUNAR ECLIPSES FROM THE YEAR 1900 THROUGH"
- 233 PRINT "9999. THE PROGRAM WILL ASK FOR FIVE INPUTS: THE YEAR, MONTH, AND DAY TO START"
- 234 PRINT "THE PREDICTIONS FROM, WHETHER YOU WISH FOR <S>OLAR OR <L>UNAR ECLIPSES, AND"
- 235 PRINT "WHETHER TO CALCULATE <F>ORWARD OR <B>ACKWARD IN TIME FROM THE STARTING DATE.":PRINT
- 237 PRINT "THE PROGRAM WILL SHOW THE CLOSEST EVENT HAPENING TO THE DATE ENTERED, THEN ASK"
- 238 PRINT "WHETHER TO <C>ONTINUE, <E>ND, OR SHOW <M>ENU. IF <C>ONTINUE IS SELECTED, THE"
- 239 PRINT "PROGRAM WILL SHOW THE NEXT EVENT IN THE TIME DIRECTION SELECTED. IF <E>ND IS"
- 240 PRINT "SELECTED, THE PROGRAM WILL TERMINATE. IF <M>ENU IS SELECTED, THE PROGRAM WILL"
- 241 PRINT "START OVER AND ASK FOR THE YEAR AGAIN. THIS WILL ALOW A SWITCH TO THE TYPE OF"
- 242 PRINT "ECLIPSE OR A CHANGE IN TIME DIRECTION.":PRINT:PRINT
- 243 INPUT "DO YOU WISH TO COMPUTE (Y/N)";Q$
- 244 IF Q$="Y" OR Q$="y" THEN CLS:GOTO 250
- 245 IF Q$="N" OR Q$="n" THEN END
- 250 CLS:GOSUB 2360
- 270 GOSUB 2550
- 280 Y2=Y%+(D0%/365)
- 300 K=(Y2-1900)*12.3685
- 310 K3=ABS(K-FIX(K))
- 320 IF K<0 THEN K3=K3+1
- 340 IF (K3>.5) AND (LS$="S") THEN K=K+.5*SGN(K)
- 370 IF LS$="L" THEN K2=.5 ELSE K2=0
- 380 K=FIX(K)+K2*SGN(K)
- 390 T=K/1236.85
- 420 SM=359.2242#+29.10535608000003#*K-.0000333*T^2-3.47E-06*T^3
- 430 SM=FN LESS(SM)
- 440 SM=SM*RA
- 450 MM=306.0253#+385.81691806#*K+.0107306*T^2+1.236E-05*T^3
- 460 MM=FN LESS(MM)
- 470 MM=MM*RA
- 480 FM=21.2964+390.67050646#*K-.0016528*T^2-2.39E-06*T^3
- 490 FM=FN LESS(FM)
- 500 FM=FM*RA
- 540 JD=.75933+.53058868#*K+.0001178*T^2-1.55E-07*T^3
- 550 JD=JD+.00033*SIN((166.56+132.87*T-.009173*T^2)*RA)
- 570 IF LS$="L" THEN JD=JD+.5
- 580 JW=FIX(2.41502E+06+29*K)
- 600 MX=(.1734-.000393*T)*SIN(SM)+.0021*SIN(2*SM)
- 610 MX=MX-.4068*SIN(MM)+.0161*SIN(2*MM)
- 620 MX=MX-.0051*SIN(SM+MM)-.0074*SIN(SM-MM)
- 630 MX=MX-.0104*SIN(2*FM)
- 640 JD=JD+MX
- 650 JW=JW+FIX(JD)
- 660 JD=JD-FIX(JD)
- 680 GOSUB 2670
- 700 TE=ABS(SIN(FM))
- 720 IF TE>.36 THEN GOSUB 2300 ELSE 770
- 730 K=K+BF
- 740 GOTO 390
- 770 S1=5.19595-.0048*COS(SM)+.002*COS(2*SM)
- 780 S1=S1-.3283*COS(MM)-.006*COS(SM+MM)
- 790 S1=S1+.0041*COS(SM+MM)
- 800 C1=.207*SIN(SM)+.0024*SIN(2*SM)-.039*SIN(MM)
- 810 C1=C1+.0115*SIN(2*MM)-.0073*SIN(SM+MM)
- 820 C1=C1-.0067*SIN(SM-MM)+.0117*SIN(2*FM)
- 840 GY=S1*SIN(FM)+C1*COS(FM)
- 850 G1=ABS(GY)
- 870 MU=.0059+.0046*COS(SM)-.0182*COS(MM)
- 880 MU=MU+.0004*COS(2*MM)-.0005*COS(SM+MM)
- 910 NT=.5458+.04*COS(MM)
- 920 UR(0)=1.5572+MU:UR(1)=1.0129-MU:UR(2)=.4679-MU
- 930 UR(3)=1.572+MU:UR(4)=1.026-MU
- 960 MG=(1.5432+MU-G1)/(.546+2*MU)
- 970 PM=(1.5572+MU-G1)/.545
- 980 UM=(1.0129-MU-G1)/.545
- 1000 ND=COS(FM)
- 1010 IF ND<0 THEN ND$="DESCENDING" ELSE ND$="ASCENDING"
- 1030 IF GY<0 THEN NS$="SOUTH" ELSE NS$="NORTH"
- 1050 IF (LS$="L") AND (PM>=0) THEN GOSUB 1580 ELSE 1090
- 1060 GOSUB 1960
- 1070 GOTO 1230
- 1090 IF (LS$="L") AND (PM<0) THEN GOSUB 2300:GOTO 1310
- 1120 IF G1>1.5432+MU THEN GOSUB 2300:GOTO 1310
- 1140 IF G1<.9972 THEN II%=0 ELSE 1190
- 1150 GOSUB 1350
- 1160 GOSUB 1960
- 1170 GOTO 1230
- 1190 T2=1.5432+MU
- 1200 IF (G1>.9972) AND (G1<T2) THEN II%=1 ELSE 1320
- 1210 GOSUB 1470
- 1220 GOSUB 1960
- 1230 PRINT
- 1240 INPUT "<C>ONTINUE, <E>ND PROGRAM, <M>ENU";D$
- 1250 D$=CHR$(ASC(D$) AND 223)
- 1260 IF D$="C" THEN 1310
- 1270 IF D$="E" THEN 1320
- 1280 IF D$="M" THEN 250
- 1290 GOTO 1230
- 1310 K=K+BF:GOTO 390
- 1320 END
- 1350 U1=MG
- 1360 IF II%=1 THEN N%=0 ELSE N%=1
- 1370 IF MU<0 THEN T1$="TOTAL SOLAR":GOTO 1440
- 1380 IF MU>.0047 THEN T1$="ANNULAR SOLAR":GOTO 1440
- 1400 W=ATN(GY/SQR(ABS(-GY*GY+1)))
- 1410 OM=.00464*COS(W)
- 1420 IF MU<OM THEN T1$="ANNULAR/TOTAL SOLAR"
- 1430 IF MU>=OM THEN T1$="ANNULAR SOLAR"
- 1440 SC%=3:GOSUB 1760
- 1450 RETURN
- 1470 U1=MG
- 1480 T3=.9972+ABS(MU)
- 1490 IF (G1>.9972) AND (G1<T3) THEN GOSUB 1350:GOTO 1540
- 1500 IF G1>T3 THEN T1$="PARTIAL SOLAR"
- 1510 N%=0:SC%=3
- 1520 GOSUB 1760
- 1540 T1$=T1$+" (NC)"
- 1550 RETURN
- 1580 SC%=0
- 1590 IF UM<0 THEN 1700
- 1600 IF UM>=1 THEN T1$="TOTAL LUNAR" ELSE GOTO 1650
- 1610 N%=2
- 1620 U1=UM
- 1630 GOSUB 1760
- 1640 GOTO 1730
- 1650 T1$="PARTIAL LUNAR"
- 1660 N%=1
- 1670 U1=UM
- 1680 GOSUB 1760
- 1690 GOTO 1730
- 1700 T1$="PENUMBRAL LUNAR"
- 1710 U1=PM
- 1720 N%=0:GOSUB 1760
- 1730 RETURN
- 1760 FOR I%=0 TO N%
- 1770 SD(I%)=SQR(UR(I%+SC%)^2-GY^2)/NT
- 1780 NEXT I%
- 1800 FOR I%=0 TO N%
- 1810 GS%=4*I%
- 1820 TI%(GS%)=INT(((H2-SD(I%))-INT(H2-SD(I%)))*60)
- 1830 TI%(GS%+1)=INT(H2-SD(I%))
- 1840 TI%(GS%+2)=INT(((H2+SD(I%))-INT(H2+SD(I%)))*60)
- 1850 TI%(GS%+3)=INT(H2+SD(I%))
- 1860 NEXT I%
- 1880 FOR I%=1 TO 11 STEP 2
- 1890 IF TI%(I%)>=24 THEN TI%(I%)=TI%(I%)-24
- 1900 IF TI%(I%)<0 THEN TI%(I%)=TI%(I%)+24
- 1910 NEXT I%
- 1920 RETURN
- 1960 PRINT:PRINT:PRINT
- 1970 PRINT TAB(20)"ECLIPSE EVENT SUMMARY":PRINT
- 1980 PRINT USING "DATE OF ECLIPSE ##/##/####";D1%,D2%,D3%
- 1990 PRINT "TYPE OF ECLIPSE ";T1$
- 2000 PRINT "MOON IS AT ";ND$;" NODE"
- 2010 IF LS$<>"L" THEN 2030
- 2020 PRINT "MOON PASSES ";NS$;" OF EARTH'S SHADOW AXIS"
- 2030 PRINT USING "ECLIPSE MAGNITUDE #.##";U1
- 2040 PRINT:PRINT TAB(20)"PHASE TIMES OF ECLIPSE":PRINT
- 2050 IF LS$="S" THEN GOSUB 2190 ELSE GOSUB 2080
- 2060 RETURN
- 2080 PRINT USING "MOON ENTERS PENUMBRA ##:## UT ";TI%(1),TI%(0)
- 2090 IF N%=0 THEN GOSUB 2270:GOTO 2160
- 2100 PRINT USING "MOON ENTERS UMBRA ##:## UT ";TI%(5),TI%(4)
- 2110 IF N%=1 THEN GOSUB 2270:GOTO 2150
- 2120 PRINT USING "TOTALITY BEGINS ##:## UT ";TI%(9),TI%(8)
- 2130 GOSUB 2270
- 2140 PRINT USING "TOTALITY ENDS ##:## UT ";TI%(11),TI%(10)
- 2150 PRINT USING "MOON LEAVES UMBRA ##:## UT ";TI%(7),TI%(6)
- 2160 PRINT USING "MOON LEAVES PENUMBRA ##:## UT ";TI%(3),TI%(2)
- 2170 RETURN
- 2190 PRINT USING "ECLIPSE BEGINS ##:## UT ";TI%(1),TI%(0)
- 2200 IF N%=0 THEN GOSUB 2270:GOTO 2240
- 2210 PRINT USING "CENTRAL ECLIPSE BEGINS ##:## UT ";TI%(5),TI%(4)
- 2220 GOSUB 2270
- 2230 PRINT USING "CENTRAL ECLIPSE ENDS ##:## UT ";TI%(7),TI%(6)
- 2240 PRINT USING "ECLIPSE ENDS ##:## UT ";TI%(3),TI%(2)
- 2250 RETURN
- 2270 PRINT USING "MAXIMUM ECLIPSE ##:## UT ";TI%(13),TI%(14)
- 2280 RETURN
- 2300 PRINT
- 2310 PRINT USING "THERE IS NO ECLIPSE ON ##/##/####";D1%,D2%,D3%
- 2320 RETURN
- 2360 PRINT
- 2370 INPUT "ENTER THE YEAR :";Y%
- 2380 INPUT "ENTER THE MONTH :";M%
- 2390 IF M%<1 OR M%>12 THEN 2380
- 2400 INPUT "ENTER THE DAY :";D%
- 2410 IF (D%<1) OR (D%>31) THEN 2400
- 2420 IF (M%=2) AND (D%>29) THEN 2400
- 2430 INPUT "DO YOU WANT A <L>UNAR OR <S>OLAR ECLIPSE :";LS$
- 2440 LS$=CHR$(ASC(LS$) AND 223)
- 2450 IF (LS$<>"L") AND (LS$<>"S") THEN 2430
- 2460 INPUT "SEARCH <F>ORWARD OR <B>ACKWARD IN TIME :";BF$
- 2470 BF$=CHR$(ASC(BF$) AND 223)
- 2480 IF BF$="F" OR BF$="f" THEN BF=1:GOTO 2510
- 2490 IF BF$="B" OR BF$="b" THEN BF=-1:GOTO 2510
- 2500 GOTO 2460
- 2510 RETURN
- 2550 LY%=0
- 2560 A2=Y%/4-INT(Y%/4)
- 2570 B2=Y%/100-INT(Y%/100)
- 2580 C2=Y%/400-INT(Y%/400)
- 2590 IF (A2=0) AND (B2<>0) THEN LY%=1
- 2600 IF C2=0 THEN LY%=1
- 2610 IF LY%=0 THEN D0%=INT((275*M%)/9)-2*INT((M%+9)/12)+D%-30
- 2620 IF LY%=1 THEN D0%=INT((275*M%)/9)-INT((M%+9)/12)+D%-30
- 2630 RETURN
- 2670 JD=JD+.5
- 2680 IF JD>=1 THEN JW=JW+1:JD=JD-1
- 2690 Z=FIX(JW)
- 2700 F=JD
- 2710 AL%=FIX((Z-1867216.25#)/36524.25#)
- 2720 A=Z+1+AL%-FIX(AL%/4)
- 2730 IF Z<2.29916E+06 THEN A=Z
- 2740 B=A+1524
- 2750 C%=FIX((B-122.1)/365.25)
- 2760 DC=FIX(365.25*C%)
- 2770 E%=FIX((B-DC)/30.6001)
- 2780 DA=B-DC-FIX(30.6001*E%)+F
- 2790 IF E%<13.5 THEN E%=E%-1
- 2800 IF E%>13.5 THEN E%=E%-13
- 2810 IF E%>2.5 THEN C%=C%-4716
- 2820 IF E%<2.5 THEN C%=C%-4715
- 2830 D2%=FIX(DA)
- 2840 D1%=E%
- 2850 D3%=C%
- 2860 H2=(DA-FIX(DA))*24
- 2870 TI%(13)=INT(H2)
- 2880 TI%(14)=INT((H2-FIX(H2))*60)
- 2890 RETURN
-
-
-